/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ivanbiz.service;

import com.ivanbiz.dao.GroupsDAO;
import com.ivanbiz.dao.PenggunaDAO;
import com.ivanbiz.dao.impl.GroupsDAOImpl;
import com.ivanbiz.dao.impl.PenggunaDAOImpl;
import com.ivanbiz.model.Groups;
import com.ivanbiz.model.Pengguna;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.select.SelectorComposer;
import org.zkoss.zk.ui.select.annotation.Listen;
import org.zkoss.zk.ui.select.annotation.Wire;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Window;

/**
 *
 * @author IW20149X
 */
public class PenggunaActionService extends SelectorComposer<Component> {

    PenggunaDAO penggunaDAO = new PenggunaDAOImpl();
    GroupsDAO groupsDAO = new GroupsDAOImpl();
    @Wire
    Window win;
    @Wire
    Textbox kode;
    @Wire
    Textbox userName;
    @Wire
    Combobox listGroup;
    Pengguna pengguna;

    @Override
    public void doAfterCompose(Component comp) throws Exception {
        super.doAfterCompose(comp);
        loadGroup();
        pengguna = (Pengguna) Executions.getCurrent().getArg().get("pengguna");
        if (pengguna == null) {
            kode.setValue(getGenereateKode());
        }
    }

    private void loadGroup() {
        try {
            List<Groups> loadGroup = groupsDAO.getAll(Groups.class);
            for (Groups groups : loadGroup) {
                Comboitem item = new Comboitem();
                item.setValue(groups);
                item.setLabel(groups.getNama());
                listGroup.appendChild(item);
            }
        } catch (Exception ex) {
            Logger.getLogger(PenggunaActionService.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @Listen("onClick=#simpan;")
    public void simpan() {
        if (pengguna == null) {
            pengguna = new Pengguna();
        }
        pengguna.setKode(kode.getValue());
        pengguna.setUserName(userName.getValue());
        MD5 md5 = new MD5(userName.getValue());
        pengguna.setPassword(md5.asHex());
        pengguna.setGroups((Groups) (listGroup.getSelectedItem() == null ? null : listGroup.getSelectedItem().getValue()));
        validatePengguna(pengguna);
    }

    private void validatePengguna(Pengguna pengguna) {
        if (pengguna.getKode().trim().isEmpty()) {
            Messagebox.show("Kode tidak boleh kosong");
        } else if (pengguna.getUserName().trim().isEmpty()) {
            Messagebox.show("User Name tidak boleh kosong");
        } else if (pengguna.getGroups() == null) {
            Messagebox.show("Groups tidak boleh kosong");
        } else {
            try {
                penggunaDAO.saveOrUpdate(pengguna);
                win.detach();
            } catch (Exception ex) {
                Logger.getLogger(PenggunaActionService.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    private String getGenereateKode() throws Exception {
        String textKode = penggunaDAO.getLastKode();
        if (!"".equals(textKode)) {
            int count = Integer.parseInt(textKode);
            count += 1;
            if (count >= 999) {
                Messagebox.show("Kode lebih dari 3 digit");
            } else {
                textKode = String.format("%03d", count);
            }
        } else {
            textKode = String.format("%03d", 1);
        }
        return textKode;
    }
}
